//
//  @ Project : tp1-algo3
//  @ File Name : Caja.java
//  @ Date : 04/05/2008
//  @ Author : Claudia, Jorge, Luciana, Luciano
//
package modelo.auto;

//import excepciones.*;

public class Caja extends Componente{
	
	private static final long serialVersionUID = 1L;
	
	/*CONSTANTES*/
	public static final int AUTOMATICA = 1;
	public static final int MANUAL = 0;   
	public static final double DEFAULT_PESO = 120.0; 	// Peso por default de una caja medido en Kg.
	public static final int DEFAULT_MARCHAS = 5; 		// marchas por default.
	public static final int DEFAULT_TIPO = MANUAL;   // tipo por default.
	
	
	/*ATRIBUTOS:*/
	private int marcha;
	private int tipoCaja;
	private int maxMarcha;
	
	/*METODOS:*/
	
	/*Constructor 1/2*/
	public Caja(String descripcion, String tipo, double costo, double peso, double factVel, double factAcel, double vidaUtil, int tipoCaja, int maxMarchas) {
		super();
		
		this.setDescripcion(descripcion);
		this.setTipo(tipo.toUpperCase());
		this.setPrecio(costo);
		this.setPeso(peso);
		this.setFactorVelocidad(factVel);
		this.setFactorAceleracion(factAcel);
		this.setVidaUtil(vidaUtil);
		this.tipoCaja = tipoCaja;
		this.maxMarcha = maxMarchas;
		this.marcha = 0;
	}
	
	/*Constructor 2/2*/
	/*Este se utiliza para crear una caja con valores por Default*/
	public Caja() {
		super();
		
		this.setDescripcion("Caja por default");
		this.setTipo("Caja");
		this.setPrecio(80);
		this.setPeso(DEFAULT_PESO);
		this.tipoCaja = DEFAULT_TIPO;
		this.maxMarcha = DEFAULT_MARCHAS;
		this.marcha = 0;
	}
	
	/**Incremento en una unidad (int) el valor de la marcha*/
	public void aumentarMarcha(){ 
		if (this.marcha < this.maxMarcha){
			this.marcha++;
		}
	}
	
	/**Decremento en una unidad (int) el valor de la marcha*/
	public void disminuirMarcha(){ //throws GearboxUnderflowException{
		if (this.marcha > 0){ /*Ya que 1 es la menor marcha posible*/
			this.marcha--;
		}

	}
	
	
	/*Getters & Setters*/
	
	/**@return la marcha actual de la caja*/
	public int getMarcha(){
		return this.marcha;
	}
	
	/**@param marcha: la marcha de la caja*/
	public void setMarcha(int marcha){
		this.marcha = marcha;
	}
	
	/**@return el tipo de caja*/
	public int getTipoCaja(){
		return this.tipoCaja;
	}
	
	/**@param tipo: el tipo de caja*/
	public void setTipoCaja(int tipo){
		this.tipoCaja = tipo;
	}
	
	/**@return el maximo valor posible de marcha de la caja*/
	public int getMaxMarcha(){
		return this.maxMarcha;
	}
	
	/**@param maxMarcha: el maximo valor posible de marcha de la caja*/
	public void setMaxMarcha(int maxMarcha){
		this.maxMarcha = maxMarcha;
	}
	
	public void neutro(){
		this.marcha = 0;
	}
	
}
